1. Field of the Invention
This invention relates to error detecting systems, and more particularly, to testing error detection/correction logic.
2. Description of the Related Art
Error codes are commonly used in electronic systems to detect and correct data errors, such as transmission errors or storage errors. For example, error codes may be used to detect and correct errors in data transmitted via a telephone line, a radio transmitter, or a compact disc laser. Error codes may additionally be used to detect and correct errors associated with data stored in the memory or mass storage devices of computer systems. One common use of error codes is to detect and correct errors of data transmitted on a data bus of a computer system. In such systems, error correction bits, or check bits, may be generated for the data prior to its transfer or storage. The check bits may then be transmitted or stored with the data. When the data is received or retrieved, the check bits may be used to detect and/or correct errors within the data.
Errors in transmitted or stored data may be caused by transient conditions in a system. For example, some errors may be caused by cross talk or noise. Component failures are another common source of error in electrical systems. Faulty components may include faulty memory chips or faulty data paths provided between devices of a system. For example, faulty data paths may result from faulty pins, faulty data traces, or faulty wires.
Hamming codes are one example of commonly used error codes. The check bits in a Hamming code may be parity bits for portions of the data bits. Each check bit may provide the parity for a unique subset of the data bits. If an error occurs (i.e., one or more of the data bits unintentionally change state), one or more of the check bits will also change state upon regeneration (assuming the error is within the class of errors covered by the code). By determining which of the regenerated check bits changed state, the location of the error within the data may be determined. For example, if one data bit changes state, this data bit will cause one or more of the regenerated check bits to change state. Based on which of the check bits change state, the erroneous bit may be identified and the error may be corrected by inverting the erroneous bit.
One common use of Hamming codes is to correct single bit errors within a group of data. Generally, the number of check bits must be large enough such that 2k−1 is greater than or equal to n+k, where k is the number of check bits and n is the number of data bits. Accordingly, seven check bits are typically required to implement a single error correcting Hamming code for 64 data bits. A single error correcting (SEC) Hamming code is capable of detecting and correcting a single-bit error.
Hamming codes that are capable of detecting double-bit errors may also be designed. Typically, such a Hamming code generates the same check bits as a single-error correction code as well as an additional check bit that provides the double-error detection. Such a code is known as a single-error correcting, double-error detecting (SECDED)) code.
There are also other error codes that, like Hamming codes, provide error detection and/or correction by generating check bits. For example, Golay codes may be used to provide multiple levels of error detection and correction.
The error detection/correction logic used to encode or decode data according to a particular error code may itself be susceptible to failure or errors. Since the error protection provided by such a device may depend on the device functioning properly, it is desirable to be able to test error detection/correction logic. However, tests for error detection/correction logic tend to input a large number of test values into the logic being tested, and as a result, the verification may take a significant amount of time to perform. Furthermore, even though large numbers of test values may be used, these test values may not be selected to thoroughly test each component of the error detection/correction logic, and thus the tests may not provide a complete verification of the device being tested.